1
컨테이너 성장 관리: 크기와 용량의 차이
AI037Lesson 14
00:00

C++에서 컨테이너 성장을 관리하는 것은 크기 (현재 요소)와 용량 (예약된 메모리) 사이의 아키텍처적 조율입니다. 연속적인 컨테이너인 vectorstring에 도달하면 시스템은 더 큰 메모리 블록을 찾고, 모든 요소를 이동한 후 오래된 블록을 삭제합니다. 이는 비용이 큰 $O(n)$ 연산으로, 재할당반복자 무효화를 유발합니다. 이전 요소에 대한 포인터는 '행동 불능' 상태가 되어 위험해집니다. 반복자 무효화—기존 요소에 대한 포인터는 '다잉' 상태가 되며 위험해집니다.

1. 확장 전략

자주 발생하는 재할당을 피하기 위해 vector 구현체는 "버퍼" 공간을 할당합니다. 명시적으로 c.reserve(n) 명령어로 요소를 추가하지 않고 최소 용량을 설정하며, 반면 c.shrink_to_fit() 은 과잉 메모리를 운영체제에 반환하도록 요청하는 비결정적 방법입니다.

2. resize와 reserve의 차이점

비록 reserve reserve는 버퍼만 영향을 미치지만, resize(n) resize는 컨테이너의 로직을 직접 변경합니다. shrink_via resize 는 요소를 삭제하고, 확장 시 기본 초기화된 값을 추가합니다.

크기 (사용됨)추가 용량총 용량
⚠️ 경고: 만약 resize 컨테이너를 축소하면 삭제된 요소에 대한 반복자가 무효화됩니다. 만약 확장으로 인해 재할당이 발생하면, 모든 모든 반복자가 무효화됩니다.
main.py
TERMINALbash — 80x24
> Ready. Click "Run" to execute.
>